/*msgserver.c*/

#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/stat.h>
#include <stdio.h>
#define MSG_FILE "."
#define BUFFER 255
#define PERM S_IRUSR|S_IWUSR
struct msgtype{
	long mtype;
	char buffer[BUFFER+1];
};
int main()
{
	struct msgtype msg;
	key_t key;
	int msgid;
	if((key=ftok(MSG_FILE,'a'))==-1)
	{
		fprintf(stderr,"creat key error:%s\n",strerror(errno));
		printf("create key error :%s \n",strerror(errno));
		exit(1);
	}
	if((msgid=msgget(key,PERM|IPC_CREAT|IPC_EXCL))==-1)
	{
		fprintf(stderr,"creat Message error:%s\n",strerror(errno));
		printf("create Message error :%s \n",strerror(errno));
		exit(1);
	}
	printf("msqid = %d \n",msgid);
	while (1)
	{
		msgrcv(msgid,&msg,sizeof(struct msgtype),1,0);
		fprintf(stderr,"Server: %s \n",msg.buffer);
	  printf("%s \n",msg.buffer);
		msg.mtype=2;
		if (strcmp(msg.buffer,"q\n")==0)
			break;
		strcpy(msg.buffer,"success to recv message!");
		sleep(2);
		msgsnd(msgid,&msg,sizeof(struct msgtype),0);	
	}
	msgctl(msgid,IPC_RMID,NULL);
	exit (0);
}
